
using System;
using Abp.Application.Services;
using Abp.Application.Services.Dto;
using System.Collections.Generic;
using System.Threading.Tasks;
using WebApp.Companys.Dtos;
using WebApp.Companys;
using WebApp.Navigations.Dtos;

namespace WebApp.Companys
{
    /// <summary>
    /// 应用层服务的接口方法
    ///</summary>
    public interface ICompanyAppService : IApplicationService
    {
        /// <summary>
		/// 获取的分页列表集合
		///</summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<CompanyListDto>> GetPaged(GetCompanysInput input);


		/// <summary>
		/// 通过指定id获取ListDto信息
		/// </summary>
		Task<CompanyListDto> GetById(EntityDto<Guid> input);


        /// <summary>
        /// 返回实体的EditDto
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<GetCompanyForEditOutput> GetForEdit(NullableIdDto<Guid> input);


        /// <summary>
        /// 添加或者修改的公共方法
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task CreateOrUpdate(CreateOrUpdateCompanyInput input);

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<CompanyEditDto> Create(CompanyEditDto input);
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task Update(CompanyEditDto input);

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task Delete(EntityDto<Guid> input);

		
        /// <summary>
        /// 批量删除
        /// </summary>
        Task BatchDelete(List<Guid> input);



        //// custom codes


        Task<PermissionTreeDto> GetCompanyTree(Guid? pid = null, bool IsUserId = false, bool needbtn = false);

        /// <summary>
        /// 已树形 结构获取 公司数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<CompanyTreeDto>> GetAllTree(GetUiMenusInput input);
							//// custom codes end
    }
}
